// 小U是一位电脑外壳供应商，而小S是一位电脑零件供应商。
// 他们想要合作组装电脑。
// 小U生产了 n 个电脑外壳，每个外壳的售价是 ai，
// 而小S生产了 n 个电脑零件，每个零件的售价是 bi。
// 当一个外壳与一个零件配对时，电脑的售价是外壳售价与零件售价的和。
// 他们需要找出一些外壳和零件的配对，使得这些配对形成的电脑售价全部相同，问最多可以组装多少部售价相同的电脑？

function solution(n, a, b) {
  let maxCount = 0;

  // 遍历所有可能的总价 target（外壳与零件的和）
  for (let i = 0; i < n; i++) {
      for (let j = 0; j < n; j++) {
          let target = a[i] + b[j];  // 计算总价

          // 使用一个计数器来记录已经配对过的外壳和零件
          let usedA = Array(n).fill(false);  // 标记外壳是否被使用
          let usedB = Array(n).fill(false);  // 标记零件是否被使用
          let count = 0;

          // 尝试配对外壳和零件，确保每个外壳和零件只能使用一次
          for (let k = 0; k < n; k++) {
              for (let l = 0; l < n; l++) {
                  if (!usedA[k] && !usedB[l] && a[k] + b[l] === target) {
                      count++;  // 形成一个合法配对
                      usedA[k] = true;  // 标记外壳已使用
                      usedB[l] = true;  // 标记零件已使用
                  }
              }
          }

          // 更新最大配对数量
          maxCount = Math.max(maxCount, count);
      }
  }

  return maxCount;
}

function main() {
  console.log(solution(4, [1, 2, 3, 4], [1, 2, 4, 5]) === 3);  // 3
  // console.log(solution(3, [1, 1, 2], [2, 2, 3]) === 2);  // 2
  // console.log(solution(5, [5, 5, 5, 5, 5], [1, 2, 3, 4, 5]) === 1);  // 1
}

main();
